TDM Tunneling
The device's TDM Tunneling feature allows you to tunnel groups of digital trunk spans or timeslots (B-channels) over the IP network. TDM Tunneling uses the device's internal routing (without Proxy control) capabilities to receive voice and data streams from TDM spans or individual timeslots, convert them into packets, and then transmit them over the IP network (using point-to-point or point-to-multipoint device distributions). A device opposite it (or several devices when point-to-multipoint distribution is used) converts the IP packets back into TDM traffic. Each timeslot can be targeted to any other timeslot within a trunk in the opposite device.
When TDM Tunneling is enabled ('TDM Tunneling' parameter configured to Enable) on the originating device, the originating device automatically initiates SIP calls from all enabled B-channels belonging to the spans that are configured with the protocol type Transparent (for ISDN trunks). The called number of each call is the internal phone number of the B‑channel from where the call originates.
The IP-to-Tel Routing table is used to define the destination IP address of the terminating device. The terminating device automatically answers these calls if the 'Protocol Type' parameter is configured to E1 TRANSPARENT 31, and the [ChannelSelectMode] parameter to 0 (By Dest Phone Number).
You can configure both devices to also operate in symmetric mode. To do so, configure the 'TDM Tunneling' parameter configured to Enable [EnableTDMOverIP] and configure the Tel-to-IP Routing table in both devices. After restarting, each device initiates calls to the other device. The first call for each B-channel is answered by the other device.
The device continuously monitors the established connections. If for some reason, one or more calls are released, the device automatically re-establishes these ‘broken’ connections. When a failure in a physical trunk or in the IP network occurs, the device re-establishes the tunneling connections when the network is restored.
It's recommended to use the keep-alive mechanism for each connection, by activating the ‘session expires’ timeout and using SIP re-INVITE messages.
The device supports the configuration (TDMoIPInitiateInviteTime and TDMoIPInviteRetryTime parameters) of the following timers for the TDM-over-IP tunneling application:
■ | Time between successive INVITEs sent from the same trunk. |
■ | Time between call release and the new INVITE that is sent on the same channel. The call can be released if the device receives a 4xx or 5xx response. |
By using profiles (see Configuring Tel Profiles), you can configure the TDM Tunneling feature to choose different settings based on a timeslot or groups of timeslots. For example, you can use low-bit-rate vocoders to transport voice and ‘Transparent’ coder to transport data (e.g., for D-channel). You can also use profiles to assign ToS (for DiffServ) per source - a timeslot carrying data or signaling is assigned a higher priority value than a timeslot carrying voice.
For TDM over IP, configure the [CallerIDTransportType] parameter to 0 (disabled), which means transparent.
Below is an example of ini files for two devices implementing TDM Tunneling for four E1 spans. In this example, both devices are dedicated to TDM tunneling.
■ | Terminating Side: |
EnableTDMOverIP = 1
;E1_TRANSPARENT_31
ProtocolType_0 = 5
ProtocolType_1 = 5
ProtocolType_2 = 5
ProtocolType_3 = 5
[PREFIX]
FORMAT Index = RouteName, DestinationPrefix, DestAddress, SourcePrefix, ProfileName, MeteringCode, DestPort, DestIPGroupName, TransportType, SrcTrunkGroupID, DestSIPInterfaceName, CostGroup, ForkingGroup, CallSetupRulesSetId, ConnectivityStatus;
Prefix 1 = TunnelA,*,10.8.24.12;
[\PREFIX]
;IP address of the device in the opposite location
;Channel selection by phone number.
ChannelSelectMode = 0
;Profiles can be used to define different coders per B-channels such as Transparent
;coder for B-channels (timeslot 16) that carries PRI signaling
[TrunkGroup]
FORMAT Index = TrunkGroupNum, FirstTrunkId, LastTrunkId, FirstBChannel, LastBChannel, FirstPhoneNumber, ProfileName, Module;
TrunkGroup 1 = 0,0,0,1,31,1000,1;
TrunkGroup 1 = 0,1,1,1,31,2000,1;
TrunkGroup 1 = 0,2,2,1,31,3000,1;
TrunkGroup 1 = 0,3,3,1,31,4000,1;
TrunkGroup 1 = 0,0,0,16,16,7000,2;
TrunkGroup 1 = 0,1,1,16,16,7001,2;
TrunkGroup 1 = 0,2,2,16,16,7002,2;
TrunkGroup 1 = 0,3,3,16,16,7003,2;
[/TrunkGroup]
[ AudioCodersGroups ]
FORMAT Index = Name;
AudioCodersGroups 0 = "AudioCodersGroups_0";
AudioCodersGroups 1 = "AudioCodersGroups_1";
[ \AudioCodersGroups ]
[ AudioCoders ]
FORMAT Index = AudioCodersGroupId, AudioCodersIndex, Name, pTime, rate, PayloadType, Sce, CoderSpecific;
AudioCoders 0 = "AudioCodersGroups_0", 0, 0, 3, 7, -1, 0, "";
AudioCoders 1 = "AudioCodersGroups_0", 0, 7, 2, 90, 56, 0, "";
[ \AudioCoders ]
[ TelProfile ]
FORMAT Index = ProfileName, TelPreference, CodersGroupName, IsFaxUsed, JitterBufMinDelay, JitterBufOptFactor, IPDiffServ, SigIPDiffServ, DtmfVolume, InputGain, VoiceVolume, EnableReversePolarity, EnableCurrentDisconnect, EnableDigitDelivery, EnableEC, MWIAnalog, MWIDisplay, FlashHookPeriod, EnableEarlyMedia, ProgressIndicator2IP, TimeForReorderTone, EnableDIDWink, IsTwoStageDial, DisconnectOnBusyTone, EnableVoiceMailDelay, DialPlanIndex, Enable911PSAP, SwapTelToIpPhoneNumbers, EnableAGC, ECNlpMode, DigitalCutThrough, EnableFXODoubleAnswer, CallPriorityMode, FXORingTimeout, JitterBufMaxDelay, IP2TelCutThroughCallBehavior, PlayBusyTone2Isdn, MWINotificationTimeout;
TelProfile 1 = "voice", 1, "AudioCodersGroups_0", 0, 10, 10, 46, 24, -11, 0, 0, 0, 0, 0, 1, 0, 0, 700, 0, -1, 255, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0;
TelProfile 2 = "data", 1, "AudioCodersGroups_1", 0, 10, 10, 46, 24, -11, 0, 0, 0, 0, 0, 1, 0, 0, 700, 0, -1, 255, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0;
[ \TelProfile ]
■ | Originating Side: |
;E1_TRANSPARENT_31
ProtocolType_0 = 5
ProtocolType_1 = 5
ProtocolType_2 = 5
ProtocolType_3 = 5
;Channel selection by Phone number.
ChannelSelectMode = 0
[TrunkGroup]
FORMAT Index = TrunkGroupNum, FirstTrunkId, LastTrunkId, FirstBChannel, LastBChannel, FirstPhoneNumber, ProfileName, Module;
TrunkGroup 0 = 0,0,0,1,31,1000,1;
TrunkGroup 0 = 0,1,1,1,31,2000,1;
TrunkGroup 0 = 0,2,2,1,31,3000,1;
TrunkGroup 0 = 0,3,1,31,4000,1;
TrunkGroup 0 = 0,0,0,16,16,7000,2;
TrunkGroup 0 = 0,1,1,16,16,7001,2;
TrunkGroup 0 = 0,2,2,16,16,7002,2;
TrunkGroup 0 = 0,3,3,16,16,7003,2;
[\TrunkGroup]
[ AudioCodersGroups ]
FORMAT Index = Name;
AudioCodersGroups 0 = "AudioCodersGroups_0";
[ \AudioCodersGroups ]
[ AudioCoders ]
FORMAT Index = AudioCodersGroupId, AudioCodersIndex, Name, pTime, rate, PayloadType, Sce, CoderSpecific;
AudioCoders 0 = "AudioCodersGroups_0", 0, 0, 3, 7, -1, 0, "";
AudioCoders 1 = "AudioCodersGroups_0", 1, 7, 2, 90, 56, 0, "";
[ \AudioCoders ]
[ TelProfile ]
FORMAT Index = ProfileName, TelPreference, CodersGroupName, IsFaxUsed, JitterBufMinDelay, JitterBufOptFactor, IPDiffServ, SigIPDiffServ, DtmfVolume, InputGain, VoiceVolume, EnableReversePolarity, EnableCurrentDisconnect, EnableDigitDelivery, EnableEC, MWIAnalog, MWIDisplay, FlashHookPeriod, EnableEarlyMedia, ProgressIndicator2IP, TimeForReorderTone, EnableDIDWink, IsTwoStageDial, DisconnectOnBusyTone, EnableVoiceMailDelay, DialPlanIndex, Enable911PSAP, SwapTelToIpPhoneNumbers, EnableAGC, ECNlpMode, DigitalCutThrough, EnableFXODoubleAnswer, CallPriorityMode, FXORingTimeout, JitterBufMaxDelay, IP2TelCutThroughCallBehavior, PlayBusyTone2Isdn, MWINotificationTimeout;
TelProfile 1 = "voice", 1, "AudioCodersGroups_0", 0, 10, 10, 46, 24, -11, 0, 0, 0, 0, 0, 1, 0, 0, 700, 0, -1, 255, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0;
TelProfile 2 = "data", 1, "AudioCodersGroups_1", 0, 10, 10, 46, 24, -11, 0, 0, 0, 0, 0, 1, 0, 0, 700, 0, -1, 255, 0, 1, 1, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0;
[ \TelProfile ]